// require 是一个方法
// 它的作用就是用来加载模块的
// 在 Node 中，模块有三种：
//    1.具名的核心模块，例如 fs、http
//    2.用户自己编写的文件模块(也就是编写的 js 文件)
//      相对路径必须加 ./
//      可以省略后缀名
//      相对路径中的 ./ 不能省略，否则报错
//    在 Node 中，没有全局作用域，只有模块作用域（文件作用域）
//      外部访问不到内部
//      内部也访问不到外部
//      默认都是封闭的
//    既然是模块作用域，那如何让模块与模块之间进行通信
//    有时候，我们加载文件模块的目的不是为了简简单单的执行里面的代码，更重要是为了使用里面的某个成员

var foo = 'aaa';

console.log('a start')

function add(x, y) {
    return x + y
}

// './b.js' 中 './' 不能省略，否则会被当做 核心模块
// Error: Cannot find module 'b'
// require('b')

// 可以
// require('./b.js')

// 推荐：可以省略后缀名
require('./b')

console.log('a end')

//因为在 Node 中，没有全局作用域，所以 foo 不会被 b.js 中的 foo 覆盖
console.log('foo 的值是：', foo);
